home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / QuickTime / Programming Stuff / QuickTime 2.1 for Developers / Interfaces / PInterfaces / MoviesFormat.p < prev    next >
Encoding:
Text File  |  1995-08-07  |  13.6 KB  |  515 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        MoviesFormat.p
  3.  
  4.      Contains:    QuickTime interfaces
  5.  
  6.      Version:    
  7.  
  8.      DRI:        Jim Batson
  9.  
  10.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Warning:    *** APPLE INTERNAL USE ONLY ***
  14.                  This file may contain unreleased API's
  15.  
  16.      BuildInfo:    Built by:            QuickTime
  17.                  With Interfacer:    1.1d11  
  18.                  From:                MoviesFormat.i
  19.                      Revision:        0
  20.                      Dated:            08/07/95
  21.                      Last change by:    JB
  22.                      Last comment:    This is a fake header used so interfacer is happy.
  23.  
  24.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. }
  28.  
  29. {$IFC UNDEFINED UsingIncludes}
  30. {$SETC UsingIncludes := 0}
  31. {$ENDC}
  32.  
  33. {$IFC NOT UsingIncludes}
  34.  UNIT MoviesFormat;
  35.  INTERFACE
  36. {$ENDC}
  37.  
  38. {$IFC UNDEFINED __MOVIESFORMAT__}
  39. {$SETC __MOVIESFORMAT__ := 1}
  40.  
  41. {$I+}
  42. {$SETC MoviesFormatIncludes := UsingIncludes}
  43. {$SETC UsingIncludes := 1}
  44.  
  45.  
  46. {$IFC UNDEFINED __TYPES__}
  47. {$I Types.p}
  48. {$ENDC}
  49. {    ConditionalMacros.p                                            }
  50.  
  51. {$IFC UNDEFINED __WINDOWS__}
  52. {$I Windows.p}
  53. {$ENDC}
  54. {    Memory.p                                                    }
  55. {        MixedMode.p                                                }
  56. {    Quickdraw.p                                                    }
  57. {        QuickdrawText.p                                            }
  58. {    Events.p                                                    }
  59. {        OSUtils.p                                                }
  60. {    Controls.p                                                    }
  61. {        Menus.p                                                    }
  62.  
  63. {$IFC UNDEFINED __IMAGECOMPRESSION__}
  64. {$I ImageCompression.p}
  65. {$ENDC}
  66. {    QDOffscreen.p                                                }
  67. {        Errors.p                                                }
  68. {    Components.p                                                }
  69. {    StandardFile.p                                                }
  70. {        Dialogs.p                                                }
  71. {            TextEdit.p                                            }
  72. {        Files.p                                                    }
  73.  
  74. {$IFC UNDEFINED __MOVIES__}
  75. {$I Movies.p}
  76. {$ENDC}
  77. {    Aliases.p                                                    }
  78. {        AppleTalk.p                                                }
  79.  
  80. {$PUSH}
  81. {$ALIGN MAC68K}
  82. {$LibExport+}
  83.  
  84. CONST
  85.     kMovieVersion                = 0;                            { version number of the format here described }
  86.  
  87.  
  88. TYPE
  89.     MoviesUserData = RECORD
  90.         size:                    LONGINT;                                { size of this user data }
  91.         udType:                    LONGINT;                                { type of user data }
  92.         data:                    PACKED ARRAY [0..0] OF CHAR;            { the user data }
  93.     END;
  94.  
  95.     UserDataAtom = RECORD
  96.         size:                    LONGINT;
  97.         atomType:                LONGINT;
  98.         userData:                ARRAY [0..0] OF MoviesUserData;
  99.     END;
  100.  
  101. {***************************************
  102. *
  103. *   MediaDirectory information -
  104. *        The MediaDirectory is tightly coupled to the data.
  105. *
  106. ***************************************}
  107.     SampleDescriptionAtom = RECORD
  108.         size:                    LONGINT;
  109.         atomType:                LONGINT;                                { = 'stsd' }
  110.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  111.         numEntries:                LONGINT;
  112.         sampleDescTable:        ARRAY [0..0] OF SampleDescription;
  113.     END;
  114.  
  115. { TimeToSampleNum maps physical sample time to physical sample number. }
  116.     TimeToSampleNum = RECORD
  117.         sampleCount:            LONGINT;
  118.         sampleDuration:            TimeValue;
  119.     END;
  120.  
  121.     TimeToSampleNumAtom = RECORD
  122.         size:                    LONGINT;
  123.         atomType:                LONGINT;                                { = 'stts' }
  124.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  125.         numEntries:                LONGINT;
  126.         timeToSampleNumTable:    ARRAY [0..0] OF TimeToSampleNum;
  127.     END;
  128.  
  129. { SyncSamples is a list of the physical samples which are self contained. }
  130.     SyncSampleAtom = RECORD
  131.         size:                    LONGINT;
  132.         atomType:                LONGINT;                                { = 'stss' }
  133.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  134.         numEntries:                LONGINT;
  135.         syncSampleTable:        ARRAY [0..0] OF LONGINT;
  136.     END;
  137.  
  138. { SampleToChunk maps physical sample number to chunk number. }
  139. { same as SampleToChunk, but redundant first sample is removed }
  140.     SampleToChunk = RECORD
  141.         firstChunk:                LONGINT;
  142.         samplesPerChunk:        LONGINT;
  143.         sampleDescriptionID:    LONGINT;
  144.     END;
  145.  
  146.     SampleToChunkAtom = RECORD
  147.         size:                    LONGINT;
  148.         atomType:                LONGINT;                                { = 'stsc' }
  149.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  150.         numEntries:                LONGINT;
  151.         sampleToChunkTable:        ARRAY [0..0] OF SampleToChunk;
  152.     END;
  153.  
  154.     ChunkOffsetAtom = RECORD
  155.         size:                    LONGINT;
  156.         atomType:                LONGINT;                                { = 'stco' }
  157.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  158.         numEntries:                LONGINT;
  159.         chunkOffsetTable:        ARRAY [0..0] OF LONGINT;
  160.     END;
  161.  
  162.     SampleSizeAtom = RECORD
  163.         size:                    LONGINT;
  164.         atomType:                LONGINT;                                { = 'stsz' }
  165.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  166.         sampleSize:                LONGINT;
  167.         numEntries:                LONGINT;
  168.         sampleSizeTable:        ARRAY [0..0] OF LONGINT;
  169.     END;
  170.  
  171.     ShadowSync = RECORD
  172.         fdSampleNum:            LONGINT;
  173.         syncSampleNum:            LONGINT;
  174.     END;
  175.  
  176.     ShadowSyncAtom = RECORD
  177.         size:                    LONGINT;
  178.         atomType:                LONGINT;                                { = 'stsz' }
  179.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  180.         numEntries:                LONGINT;
  181.         shadowSyncTable:        ARRAY [0..0] OF ShadowSync;
  182.     END;
  183.  
  184.     SampleTableAtom = RECORD
  185.         size:                    LONGINT;
  186.         atomType:                LONGINT;                                { = 'stbl' }
  187.         sampleDescription:        SampleDescriptionAtom;
  188.         timeToSampleNum:        TimeToSampleNumAtom;
  189.         sampleToChunk:            SampleToChunkAtom;
  190.         syncSample:                SyncSampleAtom;
  191.         sampleSize:                SampleSizeAtom;
  192.         chunkOffset:            ChunkOffsetAtom;
  193.         shadowSync:                ShadowSyncAtom;
  194.     END;
  195.  
  196.     PublicHandlerInfo = RECORD
  197.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  198.         componentType:            LONGINT;
  199.         componentSubType:        LONGINT;
  200.         componentManufacturer:    LONGINT;
  201.         componentFlags:            LONGINT;
  202.         componentFlagsMask:        LONGINT;
  203.         componentName:            PACKED ARRAY [0..0] OF CHAR;
  204.     END;
  205.  
  206.     HandlerAtom = RECORD
  207.         size:                    LONGINT;
  208.         atomType:                LONGINT;                                { = 'hdlr' }
  209.         hInfo:                    PublicHandlerInfo;
  210.     END;
  211.  
  212. { a data reference is a private structure }
  213.     DataRefAtom = LONGINT;
  214.  
  215.     DataInfoAtom = RECORD
  216.         size:                    LONGINT;
  217.         atomType:                LONGINT;                                { = 'dinf' }
  218.         dataRef:                DataRefAtom;
  219.     END;
  220.  
  221.     RgnAtom = RECORD
  222.         size:                    LONGINT;
  223.         atomType:                LONGINT;
  224.         rgnSize:                INTEGER;
  225.         rgnBBox:                Rect;
  226.         data:                    PACKED ARRAY [0..0] OF CHAR;
  227.     END;
  228.  
  229.     MatteCompressedAtom = RECORD
  230.         size:                    LONGINT;
  231.         atomType:                LONGINT;
  232.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  233.         matteImageDescription:    ImageDescription;
  234.         matteData:                PACKED ARRAY [0..0] OF CHAR;
  235.     END;
  236.  
  237.     MatteAtom = RECORD
  238.         size:                    LONGINT;
  239.         atomType:                LONGINT;
  240.         aCompressedMatte:        MatteCompressedAtom;
  241.     END;
  242.  
  243.     ClippingAtom = RECORD
  244.         size:                    LONGINT;
  245.         atomType:                LONGINT;
  246.         aRgnClip:                RgnAtom;
  247.     END;
  248.  
  249. {**********************
  250. * Media Info Example Structures
  251. **********************}
  252.     VideoMediaInfoHeader = RECORD
  253.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  254.         graphicsMode:            INTEGER;                                { for QD - transfer mode }
  255.         opColorRed:                INTEGER;                                { opcolor for transfer mode }
  256.         opColorGreen:            INTEGER;
  257.         opColorBlue:            INTEGER;
  258.     END;
  259.  
  260.     VideoMediaInfoHeaderAtom = RECORD
  261.         size:                    LONGINT;                                { size of Media info }
  262.         atomType:                LONGINT;                                { = 'vmhd' }
  263.         vmiHeader:                VideoMediaInfoHeader;
  264.     END;
  265.  
  266.     VideoMediaInfo = RECORD
  267.         size:                    LONGINT;                                { size of Media info }
  268.         atomType:                LONGINT;                                { = 'minf' }
  269.         header:                    VideoMediaInfoHeaderAtom;
  270.         dataHandler:            HandlerAtom;
  271.         dataInfo:                DataInfoAtom;
  272.         sampleTable:            SampleTableAtom;
  273.     END;
  274.  
  275.     SoundMediaInfoHeader = RECORD
  276.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  277.         balance:                INTEGER;
  278.         rsrvd:                    INTEGER;
  279.     END;
  280.  
  281.     SoundMediaInfoHeaderAtom = RECORD
  282.         size:                    LONGINT;                                { size of Media info }
  283.         atomType:                LONGINT;                                { = 'vmhd' }
  284.         smiHeader:                SoundMediaInfoHeader;
  285.     END;
  286.  
  287.     SoundMediaInfo = RECORD
  288.         size:                    LONGINT;                                { size of Media info }
  289.         atomType:                LONGINT;                                { = 'minf' }
  290.         header:                    SoundMediaInfoHeaderAtom;
  291.         dataHandler:            HandlerAtom;
  292.         dataReference:            DataRefAtom;
  293.         sampleTable:            SampleTableAtom;
  294.     END;
  295.  
  296. { whatever data the media handler needs goes after the atomType }
  297.     MediaInfo = RECORD
  298.         size:                    LONGINT;
  299.         atomType:                LONGINT;
  300.     END;
  301.  
  302. {**********************
  303. * Media Directory Structures
  304. **********************}
  305.     MediaHeader = RECORD
  306.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  307.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  308.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  309.         timeScale:                TimeValue;                                { start time for Media (Media time) }
  310.         duration:                TimeValue;                                { length of Media (Media time) }
  311.         language:                INTEGER;
  312.         quality:                INTEGER;
  313.     END;
  314.  
  315.     MediaHeaderAtom = RECORD
  316.         size:                    LONGINT;
  317.         atomType:                LONGINT;
  318.         header:                    MediaHeader;
  319.     END;
  320.  
  321.     MediaDirectory = RECORD
  322.         size:                    LONGINT;
  323.         atomType:                LONGINT;                                { = 'mdia' }
  324.         mediaHeader:            MediaHeaderAtom;                        { standard Media information }
  325.         mediaHandler:            HandlerAtom;
  326.         mediaInfo:                MediaInfo;
  327.     END;
  328.  
  329. {**********************
  330. * Track Structures
  331. **********************}
  332.  
  333. CONST
  334.     TrackEnable                    = 1 * (2**(0));
  335.     TrackInMovie                = 1 * (2**(1));
  336.     TrackInPreview                = 1 * (2**(2));
  337.     TrackInPoster                = 1 * (2**(3));
  338.  
  339.  
  340. TYPE
  341.     TrackHeader = RECORD
  342.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  343.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  344.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  345.         trackID:                LONGINT;
  346.         reserved1:                LONGINT;
  347.         duration:                TimeValue;                                { length of track (track time) }
  348.         reserved2:                LONGINT;
  349.         reserved3:                LONGINT;
  350.         layer:                    INTEGER;
  351.         alternateGroup:            INTEGER;
  352.         volume:                    INTEGER;
  353.         reserved4:                INTEGER;
  354.         matrix:                    MatrixRecord;
  355.         trackWidth:                Fixed;
  356.         trackHeight:            Fixed;
  357.     END;
  358.  
  359.     TrackHeaderAtom = RECORD
  360.         size:                    LONGINT;                                { size of track header }
  361.         atomType:                LONGINT;                                { = 'tkhd' }
  362.         header:                    TrackHeader;
  363.     END;
  364.  
  365.     EditListType = RECORD
  366.         trackDuration:            TimeValue;
  367.         mediaTime:                TimeValue;
  368.         mediaRate:                Fixed;
  369.     END;
  370.  
  371.     EditListAtom = RECORD
  372.         size:                    LONGINT;
  373.         atomType:                LONGINT;                                { = elst }
  374.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  375.         numEntries:                LONGINT;
  376.         editListTable:            ARRAY [0..0] OF EditListType;
  377.     END;
  378.  
  379.     EditsAtom = RECORD
  380.         size:                    LONGINT;
  381.         atomType:                LONGINT;                                { = edts }
  382.         editList:                EditListAtom;
  383.     END;
  384.  
  385.     TrackLoadSettings = RECORD
  386.         preloadStartTime:        TimeValue;
  387.         preloadDuration:        TimeValue;
  388.         preloadFlags:            LONGINT;
  389.         defaultHints:            LONGINT;
  390.     END;
  391.  
  392.     TrackLoadSettingsAtom = RECORD
  393.         size:                    LONGINT;
  394.         atomType:                LONGINT;                                { = load }
  395.         settings:                TrackLoadSettings;
  396.     END;
  397.  
  398.     TrackDirectory = RECORD
  399.         size:                    LONGINT;
  400.         atomType:                LONGINT;                                { = 'trak' }
  401.         trackHeader:            TrackHeaderAtom;                        { standard track information }
  402.         trackClip:                ClippingAtom;
  403.         edits:                    EditsAtom;
  404.         media:                    MediaDirectory;
  405.         userData:                UserDataAtom;                            { space for extending with new data types }
  406.     END;
  407.  
  408. {***************************************
  409. *
  410. *   MovieDirectory -
  411. *        The MovieDirectory is the top level structure which
  412. *        holds the TrackInstance describing where the
  413. *        TrackDirectories are.
  414. *
  415. ***************************************}
  416.     MovieHeader = RECORD
  417.         flags:                    LONGINT;                                { 1 byte of version / 3 bytes of flags }
  418.         creationTime:            LONGINT;                                { seconds since Jan 1904 when directory was created }
  419.         modificationTime:        LONGINT;                                { seconds since Jan 1904 when directory was appended }
  420.         timeScale:                TimeValue;                                { Time specifications }
  421.         duration:                TimeValue;
  422.         preferredRate:            Fixed;                                    { rate at which to play this movie }
  423.         preferredVolume:        INTEGER;                                { volume to play movie at }
  424.         reserved1:                INTEGER;
  425.         preferredLong1:            LONGINT;
  426.         preferredLong2:            LONGINT;
  427.         matrix:                    MatrixRecord;
  428.         previewTime:            TimeValue;                                { time in track the proxy begins (track time) }
  429.         previewDuration:        TimeValue;                                { how long the proxy lasts (track time) }
  430.         posterTime:                TimeValue;                                { time in track the proxy begins (track time) }
  431.         selectionTime:            TimeValue;                                { time in track the proxy begins (track time) }
  432.         selectionDuration:        TimeValue;                                { time in track the proxy begins (track time) }
  433.         currentTime:            TimeValue;                                { time in track the proxy begins (track time) }
  434.         nextTrackID:            LONGINT;                                { next value to use for a TrackID }
  435.     END;
  436.  
  437.     MovieHeaderAtom = RECORD
  438.         size:                    LONGINT;
  439.         atomType:                LONGINT;                                { = 'mvhd' }
  440.         header:                    MovieHeader;
  441.     END;
  442.  
  443.     MovieDirectory = RECORD
  444.         size:                    LONGINT;
  445.         atomType:                LONGINT;                                { = 'moov' }
  446.         header:                    MovieHeaderAtom;
  447.         movieClip:                ClippingAtom;
  448.         { Track Directories }
  449.         track:            RECORD
  450.                 trackDirectory:                    TrackDirectory;                    { Track directory information }
  451.             END;
  452.  
  453.  
  454.         { User data for Movie }
  455.         userData:                UserDataAtom;                            { space for user extensions }
  456.     END;
  457.  
  458.  
  459. CONST
  460. { some system defined format IDs }
  461.     MOVIE_TYPE                    = 'moov';
  462.     TRACK_TYPE                    = 'trak';
  463.     MEDIA_TYPE                    = 'mdia';
  464.     VIDEO_TYPE                    = 'vide';
  465.     SOUND_TYPE                    = 'soun';
  466.  
  467. { atom id's }
  468.     MovieAID                    = 'moov';
  469.     MovieHeaderAID                = 'mvhd';
  470.     ClipAID                        = 'clip';
  471.     RgnClipAID                    = 'crgn';
  472.     MatteAID                    = 'matt';
  473.     MatteCompAID                = 'kmat';
  474.     TrackAID                    = 'trak';
  475.     UserDataAID                    = 'udta';
  476.     TrackHeaderAID                = 'tkhd';
  477.     EditsAID                    = 'edts';
  478.     EditListAID                    = 'elst';
  479.     MediaAID                    = 'mdia';
  480.     MediaHeaderAID                = 'mdhd';
  481.     MediaInfoAID                = 'minf';
  482.     VideoMediaInfoHeaderAID        = 'vmhd';
  483.     SoundMediaInfoHeaderAID        = 'smhd';
  484.     GenericMediaInfoHeaderAID    = 'gmhd';
  485.     GenericMediaInfoAID            = 'gmin';
  486.     DataInfoAID                    = 'dinf';
  487.     DataRefAID                    = 'dref';
  488.     SampleTableAID                = 'stbl';
  489.     STSampleDescAID                = 'stsd';
  490.     STTimeToSampAID                = 'stts';
  491.     STSyncSampleAID                = 'stss';
  492.     STSampleToChunkAID            = 'stsc';
  493.     STShadowSyncAID                = 'stsh';
  494.     HandlerAID                    = 'hdlr';
  495.     STSampleSizeAID                = 'stsz';
  496.     STChunkOffsetAID            = 'stco';
  497.     DataRefContainerAID            = 'drfc';
  498.     TrackReferenceAID            = 'tref';
  499.     ColorTableAID                = 'ctab';
  500.     LoadSettingsAID                = 'load';
  501.     CodeCollectionAID            = 'code';
  502.     InputMapAID                    = 'imap';
  503.  
  504.  
  505. {$ALIGN RESET}
  506. {$POP}
  507.  
  508. {$SETC UsingIncludes := MoviesFormatIncludes}
  509.  
  510. {$ENDC} {__MOVIESFORMAT__}
  511.  
  512. {$IFC NOT UsingIncludes}
  513.  END.
  514. {$ENDC}
  515.